//
// Copyright (C) [2024] Xingyun Integrated Circuit, Inc.
//
// GreenCode was a private technology asset of Xingyun Integrated Circuit， Inc （Confidential）
//  Author: Shawn.Tan
//  Date : 2025.10.28
//
//  History : Initial Version 2025.10.28
//
//
#ifndef Green_GenStateTransitionAgent_H
#define Green_GenStateTransitionAgent_H

#include "Defines.h"
#include "Enums.h"
#include "GenAgent.h"

namespace Green {

  class GenStateTransitionRequest;

  /*!
    \class GenStateTransitionAgent
    \brief A generator agent class for StateTransitions.
  */
  class GenStateTransitionAgent : public GenAgent {
  public:
    GenStateTransitionAgent();
    SUBCLASS_DESTRUCTOR_DEFAULT(GenStateTransitionAgent);
    ASSIGNMENT_OPERATOR_ABSENT(GenStateTransitionAgent);

    Object* Clone() const override { return new GenStateTransitionAgent(*this); } //!< Return a cloned Object of the same type and same contents as the Object being cloned.
    const char* Type() const override { return "GenStateTransitionAgent"; } //!< Return a string describing the actual type of the Object.

    EGenAgentType GenAgentType() const override { return EGenAgentType::GenStateTransitionAgent; } //!< Return type of the generator agent.
    void SetGenRequest(GenRequest* genRequest) override; //!< Set pointer to GenRequest object.
  protected:
    GenStateTransitionAgent(const GenStateTransitionAgent& rOther);
    void HandleRequest() override; //!< Handle GenStateTransitionRequest transaction.
    void CleanUpRequest() override; //!< Clean up request item.
  private:
    GenStateTransitionRequest* mpStateTransReq;
  };

}

#endif
